import globals from 'globals';
import { defineConfigWithVueTs, vueTsConfigs, configureVueProject } from '@vue/eslint-config-typescript';
import pluginVue from 'eslint-plugin-vue';
import prettier from 'eslint-plugin-prettier/recommended';
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting';
import autoImport from './.eslintrc-auto-import.json';

configureVueProject({ scriptLangs: ['ts', 'tsx'] });

export default defineConfigWithVueTs(
	{
		name: 'app/files-to-lint',
		files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
		languageOptions: {
			ecmaVersion: 'latest',
			sourceType: 'module',
			globals: {
				...globals.browser,
				...globals.node,
				...autoImport.globals,
				ElLoading: 'readonly',
				ElMessage: 'readonly',
				ElMessageBox: 'readonly',
				objType: 'readonly',
				columnsType: 'readonly',
				formItemType: 'readonly',
				stateType: 'readonly',
				ApiResponse: 'readonly'
			}
		}
	},
	{
		ignores: [
			'dist',
			'node_modules',
			'coder',
			'mock',
			'public',
			'src/api',
			'src/components/my-process',
			'src/components/my-gantt',
			'src/components/my-x6',
			'src/utils/StrUtil.js',
			'.vscode',
			'.idea',
			'.eslintrc.js',
			'.prettierrc.js',
			'*.d.ts'
		]
	},
	pluginVue.configs['flat/recommended'],
	vueTsConfigs.recommended,
	prettier,
	{
		rules: {
			indent: 'off', // 禁用 ESLint 的缩进规则
			'no-tabs': 'off', // 关闭tab检验
			'no-mixed-spaces-and-tabs': 0, // 不规范的空格 关闭校验
			'prefer-const': 0, // 使用 let 关键字声明但在初始分配后从未重新分配的变量，要求使用 const
			'no-var': 2, //对var禁止
			'no-undef': 2, //不能有未定义的变量
			'no-const-assign': 2, //禁止修改const声明的变量
			'no-duplicate-case': 2, //switch中的case标签不能重复
			'no-dupe-args': 2, //函数参数不能重复
			'no-func-assign': 2, //禁止重复的函数声明
			'no-redeclare': 2, //禁止重复声明变量
			'no-use-before-define': 0, //未定义前不能使用
			'no-constant-condition': 2, // 禁止在条件中使用常量表达式 if(true) if('warn')
			'no-unreachable': 2, // 不能有无法执行的代码
			'no-unneeded-ternary': 2, // 禁止不必要的嵌套 var isYes = answer === 'warn' ? true : false;
			'no-underscore-dangle': 0, // 标识符不能以_开头或结尾
			'linebreak-style': 'off', // 取消换行规则校验
			'vue/multi-word-component-names': 0, // 关闭名称校验
			'vue/require-v-for-key': 2, // vue的for循环是否必须有key
			'vue/valid-template-root': 0, // vue文件是否强制需要子元素
			'vue/require-prop-types': 0, // 强制使用prop-types
			'vue/script-setup-uses-vars': 2, // 防止<script setup>使用的变量<template>被标记为未使用
			'vue/require-default-prop': 'off', // 此规则要求为每个 prop 为必填时，必须提供默认值
			'vue/return-in-computed-property': 'off', // 此规则要求为每个 computed 必须提供返回值
			'vue/no-v-html': 0, // 禁止使用 v-html
			// 禁止在 <script> 标签中使用 lang 属性
			'vue/block-lang': [
				'error',
				{
					script: {
						lang: ['ts', 'js']
					}
				}
			],
			'@typescript-eslint/no-unused-vars': ['error', { args: 'after-used', argsIgnorePattern: '^_' }], // 已声明“aa”，但从未使用。
			'@typescript-eslint/no-explicit-any': 0, // 允许 any 类型
			'@typescript-eslint/no-unused-expressions': 0, // 允许未使用的表达式
			'@typescript-eslint/ban-ts-comment': 0, // 允许 ts 注释
			'@typescript-eslint/no-this-alias': 0, // 允许 this 别名
			'prettier/prettier': [
				'error',
				{
					// 使用 Prettier 的配置文件
					usePrettierrc: true
				}
			]
		}
	},
	skipFormatting
);
